home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 February: Tool Chest / Dev.CD Feb 94.toast / Tool Chest / Development Platforms / MPW Related / MPW Interfaces / PInterfaces / Memory.p < prev    next >
Encoding:
Text File  |  1993-09-17  |  7.2 KB  |  251 lines  |  [TEXT/MPS ]

  1. {
  2.     File:        Memory.p
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.  
  10. }
  11.  
  12. {$IFC UNDEFINED UsingIncludes}
  13. {$SETC UsingIncludes := 0}
  14. {$ENDC}
  15.  
  16. {$IFC NOT UsingIncludes}
  17.     UNIT Memory;
  18.     INTERFACE
  19. {$ENDC}
  20.  
  21. {$IFC UNDEFINED UsingMemory}
  22. {$SETC UsingMemory := 1}
  23.  
  24. {$I+}
  25. {$SETC MemoryIncludes := UsingIncludes}
  26. {$SETC UsingIncludes := 1}
  27. {$IFC UNDEFINED UsingTypes}
  28. {$I $$Shell(PInterfaces)Types.p}
  29. {$ENDC}
  30. {$SETC UsingIncludes := MemoryIncludes}
  31.  
  32. CONST
  33. maxSize = $800000;  {Max data block size is 8 megabytes}
  34. defaultPhysicalEntryCount = 8;
  35.  
  36. { values returned from the GetPageState function }
  37. kPageInMemory = 0;
  38. kPageOnDisk = 1;
  39. kNotPaged = 2;
  40.  
  41. TYPE
  42. Size = LONGINT;     { size of a block in bytes }
  43.  
  44. THz = ^Zone;
  45. Zone = RECORD
  46.     bkLim: Ptr;
  47.     purgePtr: Ptr;
  48.     hFstFree: Ptr;
  49.     zcbFree: LONGINT;
  50.     gzProc: ProcPtr;
  51.     moreMast: INTEGER;
  52.     flags: INTEGER;
  53.     cntRel: INTEGER;
  54.     maxRel: INTEGER;
  55.     cntNRel: INTEGER;
  56.     maxNRel: INTEGER;
  57.     cntEmpty: INTEGER;
  58.     cntHandles: INTEGER;
  59.     minCBFree: LONGINT;
  60.     purgeProc: ProcPtr;
  61.     sparePtr: Ptr;
  62.     allocPtr: Ptr;
  63.     heapData: INTEGER;
  64.     END;
  65.  
  66. MemoryBlock = RECORD
  67.     address: Ptr;
  68.     count: LONGINT;
  69.     END;
  70.  
  71. LogicalToPhysicalTable = RECORD
  72.     logical: MemoryBlock;
  73.     physical: ARRAY [0..defaultPhysicalEntryCount - 1] OF MemoryBlock;
  74.     END;
  75.  
  76.  
  77. PageState = INTEGER;
  78. StatusRegisterContents = INTEGER;
  79.  
  80. FUNCTION GetApplLimit: Ptr;
  81.     INLINE $2EB8,$0130;
  82. FUNCTION GetZone: THz;
  83.     INLINE $A11A,$2E88;
  84. FUNCTION SystemZone: THz;
  85.     INLINE $2EB8,$02A6;
  86. FUNCTION ApplicZone: THz;
  87.     INLINE $2EB8,$02AA;
  88. FUNCTION ApplicationZone: THz;
  89.     INLINE $2EB8,$02AA;
  90. FUNCTION NewHandle(byteCount: Size): Handle;
  91. FUNCTION NewHandleSys(byteCount: Size): Handle;
  92. FUNCTION NewHandleClear(byteCount: Size): Handle;
  93. FUNCTION NewHandleSysClear(byteCount: Size): Handle;
  94. FUNCTION HandleZone(h: Handle): THz;
  95. FUNCTION RecoverHandle(p: Ptr): Handle;
  96. FUNCTION NewPtr(byteCount: Size): Ptr;
  97. FUNCTION NewPtrSys(byteCount: Size): Ptr;
  98. FUNCTION NewPtrClear(byteCount: Size): Ptr;
  99. FUNCTION NewPtrSysClear(byteCount: Size): Ptr;
  100. FUNCTION PtrZone(p: Ptr): THz;
  101. FUNCTION GZSaveHnd: Handle;
  102.     INLINE $2EB8,$0328;
  103. FUNCTION TopMem: Ptr;
  104.     INLINE $2EB8,$0108;
  105. FUNCTION MaxBlock: LONGINT;
  106. FUNCTION MaxBlockSys: LONGINT;
  107. FUNCTION StackSpace: LONGINT;
  108. FUNCTION NewEmptyHandle: Handle;
  109. FUNCTION NewEmptyHandleSys: Handle;
  110. PROCEDURE HLock(h: Handle);
  111.     INLINE $205F,$A029;
  112. PROCEDURE HUnlock(h: Handle);
  113.     INLINE $205F,$A02A;
  114. PROCEDURE HPurge(h: Handle);
  115.     INLINE $205F,$A049;
  116. PROCEDURE HNoPurge(h: Handle);
  117.     INLINE $205F,$A04A;
  118. PROCEDURE HLockHi(h: Handle);
  119.     INLINE $205F,$A064,$A029;
  120. FUNCTION StripAddress(theAddress: UNIV Ptr): Ptr;
  121. {$IFC SystemSixOrLater }
  122.     INLINE $201F,$A055,$2E80;
  123. {$ENDC}
  124. FUNCTION Translate24To32(addr24: UNIV Ptr): Ptr;
  125.     INLINE $201F,$A091,$2E80;
  126. FUNCTION TempNewHandle(logicalSize: Size;VAR resultCode: OSErr): Handle;
  127.     INLINE $3F3C,$001D,$A88F;
  128. FUNCTION TempMaxMem(VAR grow: Size): Size;
  129.     INLINE $3F3C,$0015,$A88F;
  130. FUNCTION TempFreeMem: LONGINT;
  131.     INLINE $3F3C,$0018,$A88F;
  132.  
  133. {  Temporary Memory routines renamed, but obsolete, in System 7.0 and later.  }
  134. PROCEDURE TempHLock(h: Handle;VAR resultCode: OSErr);
  135.     INLINE $3F3C,$001E,$A88F;
  136. PROCEDURE TempHUnlock(h: Handle;VAR resultCode: OSErr);
  137.     INLINE $3F3C,$001F,$A88F;
  138. PROCEDURE TempDisposeHandle(h: Handle;VAR resultCode: OSErr);
  139.     INLINE $3F3C,$0020,$A88F;
  140. FUNCTION TempTopMem: Ptr;
  141.     INLINE $3F3C,$0016,$A88F;
  142.  
  143. {  Temporary Memory routines as they were known before System 7.0.  }
  144. FUNCTION MFMaxMem(VAR grow: Size): Size;
  145.     INLINE $3F3C,$0015,$A88F;
  146. FUNCTION MFFreeMem: LONGINT;
  147.     INLINE $3F3C,$0018,$A88F;
  148. FUNCTION MFTempNewHandle(logicalSize: Size;VAR resultCode: OSErr): Handle;
  149.     INLINE $3F3C,$001D,$A88F;
  150. PROCEDURE MFTempHLock(h: Handle;VAR resultCode: OSErr);
  151.     INLINE $3F3C,$001E,$A88F;
  152. PROCEDURE MFTempHUnlock(h: Handle;VAR resultCode: OSErr);
  153.     INLINE $3F3C,$001F,$A88F;
  154. PROCEDURE MFTempDisposHandle(h: Handle;VAR resultCode: OSErr);
  155.     INLINE $3F3C,$0020,$A88F;
  156. FUNCTION MFTopMem: Ptr;
  157.     INLINE $3F3C,$0016,$A88F;
  158. PROCEDURE InitApplZone;
  159.     INLINE $A02C;
  160. PROCEDURE InitZone(pgrowZone: ProcPtr;cmoreMasters: INTEGER;limitPtr: UNIV Ptr;
  161.     startPtr: UNIV Ptr);
  162. PROCEDURE SetZone(hz: THz);
  163.     INLINE $205F,$A01B;
  164. FUNCTION CompactMem(cbNeeded: Size): Size;
  165. FUNCTION CompactMemSys(cbNeeded: Size): Size;
  166. PROCEDURE PurgeMem(cbNeeded: Size);
  167.     INLINE $201F,$A04D;
  168. PROCEDURE PurgeMemSys(cbNeeded: Size);
  169.     INLINE $201F,$A44D;
  170. FUNCTION FreeMem: LONGINT;
  171.     INLINE $A01C,$2E80;
  172. FUNCTION FreeMemSys: LONGINT;
  173.     INLINE $A41C,$2E80;
  174. PROCEDURE ResrvMem(cbNeeded: Size);
  175.     INLINE $201F,$A040;
  176. PROCEDURE ReserveMem(cbNeeded: Size);
  177.     INLINE $201F,$A040;
  178. PROCEDURE ReserveMemSys(cbNeeded: Size);
  179.     INLINE $201F,$A440;
  180. FUNCTION MaxMem(VAR grow: Size): Size;
  181. FUNCTION MaxMemSys(VAR grow: Size): Size;
  182. PROCEDURE SetGrowZone(growZone: ProcPtr);
  183.     INLINE $205F,$A04B;
  184. PROCEDURE SetApplLimit(zoneLimit: UNIV Ptr);
  185.     INLINE $205F,$A02D;
  186. PROCEDURE MoveHHi(h: Handle);
  187.     INLINE $205F,$A064;
  188. PROCEDURE DisposPtr(p: Ptr);
  189.     INLINE $205F,$A01F;
  190. PROCEDURE DisposePtr(p: Ptr);
  191.     INLINE $205F,$A01F;
  192. FUNCTION GetPtrSize(p: Ptr): Size;
  193. PROCEDURE SetPtrSize(p: Ptr;newSize: Size);
  194. PROCEDURE DisposHandle(h: Handle);
  195.     INLINE $205F,$A023;
  196. PROCEDURE DisposeHandle(h: Handle);
  197.     INLINE $205F,$A023;
  198. FUNCTION GetHandleSize(h: Handle): Size;
  199. PROCEDURE SetHandleSize(h: Handle;newSize: Size);
  200. PROCEDURE EmptyHandle(h: Handle);
  201.     INLINE $205F,$A02B;
  202. PROCEDURE ReallocHandle(h: Handle;byteCount: Size);
  203. PROCEDURE ReallocateHandle(h: Handle;byteCount: Size);
  204. PROCEDURE HSetRBit(h: Handle);
  205.     INLINE $205F,$A067;
  206. PROCEDURE HClrRBit(h: Handle);
  207.     INLINE $205F,$A068;
  208. PROCEDURE MoreMasters;
  209.     INLINE $A036;
  210. PROCEDURE BlockMove(srcPtr: UNIV Ptr;destPtr: UNIV Ptr;byteCount: Size);
  211. FUNCTION MemError: OSErr;
  212.     INLINE $3EB8,$0220;
  213. PROCEDURE PurgeSpace(VAR total: LONGINT;VAR contig: LONGINT);
  214. FUNCTION HGetState(h: Handle): SignedByte;
  215. PROCEDURE HSetState(h: Handle;flags: SignedByte);
  216. PROCEDURE SetApplBase(startPtr: UNIV Ptr);
  217.     INLINE $205F,$A057;
  218. PROCEDURE MaxApplZone;
  219.     INLINE $A063;
  220. FUNCTION HoldMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  221. FUNCTION UnholdMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  222. FUNCTION LockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  223. FUNCTION LockMemoryContiguous(address: UNIV Ptr;count: LONGINT): OSErr;
  224. FUNCTION UnlockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  225. FUNCTION GetPhysical(VAR addresses: LogicalToPhysicalTable;VAR physicalEntryCount: LONGINT): OSErr;
  226. FUNCTION DeferUserFn(userFunction: ProcPtr;argument: UNIV Ptr): OSErr;
  227. FUNCTION DebuggerGetMax: LONGINT;
  228.     INLINE $7000,$A08D,$2E80;
  229. PROCEDURE DebuggerEnter;
  230.     INLINE $7001,$A08D;
  231. PROCEDURE DebuggerExit;
  232.     INLINE $7002,$A08D;
  233. PROCEDURE DebuggerPoll;
  234.     INLINE $7003,$A08D;
  235. FUNCTION GetPageState(address: UNIV Ptr): PageState;
  236.     INLINE $205F,$7004,$A08D,$3E80;
  237. FUNCTION PageFaultFatal: BOOLEAN;
  238.     INLINE $7005,$A08D,$1E80;
  239. FUNCTION DebuggerLockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  240. FUNCTION DebuggerUnlockMemory(address: UNIV Ptr;count: LONGINT): OSErr;
  241. FUNCTION EnterSupervisorMode: StatusRegisterContents;
  242.     INLINE $7008,$A08D,$3E80;
  243.  
  244.  
  245. {$ENDC}    { UsingMemory }
  246.  
  247. {$IFC NOT UsingIncludes}
  248.     END.
  249. {$ENDC}
  250.  
  251.